package com.think.admin.annotations;

import com.think.dao.enums.ResourcePermissionTypeEnum;

import java.lang.annotation.*;

/**
 * 资源注解
 *
 * @author xwj
 */
@Target({ElementType.METHOD, ElementType.TYPE})// 注解会在class字节码文件中存在，在运行时可以通过反射获取到
//ElementType.METHOD 可以给方法进行注解
//ElementType.TYPE 可以给一个类型进行注解，比如类、接口、枚举
@Retention(RetentionPolicy.RUNTIME)//定义注解的作用目标**作用范围字段、枚举的常量/方法
//Retention 的英文意为保留期的意思。当 @Retention 应用到一个注解上的时候，它解释说明了这个注解的的存活时间。
//RetentionPolicy.SOURCE 注解只在源码阶段保留，在编译器进行编译时它将被丢弃忽视。
//RetentionPolicy.CLASS 注解只被保留到编译进行的时候，它并不会被加载到 JVM 中。
//RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候，它会被加载进入到 JVM 中，所以在程序运行时可以获取到它们。
@Documented//顾名思义，这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去。
public @interface ResourceAnnotation {

    /**
     * 资源名称
     */
    String name();

    /**
     * 权限类型
     */
    ResourcePermissionTypeEnum permissionType();

    /**
     * 资源序号
     */
    int sort();
}
